package Neuronio;

import java.util.Random;
import Configuracoes.Configs;
import funcoesAtivacao.IFuncaoAtivacao;

public class Neuronio {

	private double saida;
	private double entradas[];
	private double pesos[];
	private IFuncaoAtivacao funcaoAtivacao;
	private static long semente = Configs.SEMENTE;
	
	public Neuronio(int numeroEntradas, IFuncaoAtivacao funcaoAtivacao)
	{
		this.pesos = new double[numeroEntradas];
		this.entradas = new double[numeroEntradas];
		this.saida = 0;
		this.funcaoAtivacao = funcaoAtivacao;
		gerarPesosAleatorios();
	}
	
	public double[] getEntradas() {
		return entradas;
	}

	public void setEntradas(double[] entradas) {
		this.entradas = entradas;
	}

	public double getSaida() {
		return saida;
	}

	public void setSaida(double saida) {
		this.saida = saida;
	}
	
	public double[] getPesos() {
		return pesos;
	}

	public void setPesos(double[] pesos) {
		this.pesos = pesos;
	}
	
	public void gerarPesosAleatorios()
	{
		Random rand = new Random(semente*=3);
		for(int i=0; i < pesos.length; i++)
		{	
			this.pesos[i] = 2*rand.nextDouble()-1;
		}
	}
	
	public double calcularSaidaForward()
	{
		double net = 0;
		for(int i = 0; i < entradas.length; i++ )
		{
			net += pesos[i]*entradas[i];
		}
		saida = funcaoAtivacao.aplicarFuncao(net);
		return saida;
	}
	
	public double calcularSaidaBackward(double net)
	{
		return funcaoAtivacao.derivada(net);
	}
	
	
}
